package com.wrial.kind.linkedList;
/*
 * @Author  Wrial
 * @Date Created in 19:02 2020/8/7
 * @Description  swapPairs对链表节点两两交换，不能只是单纯值的交换
 */

import java.util.List;

public class SwapPairs {


    /**
     * 给定 1->2->3->4, 你应该返回 2->1->4->3.
     * pre是连接前面链表的中间桥梁  p是第一个节点  q是第二个节点
     * （注意点：不合法判断，head==null||head.next==null，其次需要注意更新pre为p   ）
     * @param head
     * @return
     */
    public ListNode swapPairs(ListNode head) {

        if (head == null || head.next == null) return head;
        ListNode dummy = new ListNode(-1);
        dummy.next = head;
        ListNode pre = dummy;
        ListNode p = head;
        ListNode q = head.next;

        while (q != null) {
            ListNode after = q.next;
            pre.next = q;
            q.next = p;
            p.next = after;
            pre = p;
            if (p.next == null) break;
            p = p.next;
            q = p.next;
        }
        return dummy.next;
    }

    public class ListNode {
        int val;
        ListNode next;

        ListNode(int x) {
            val = x;
        }
    }
}
